package com.mac.bill.service.impl;

import java.util.*;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mac.bill.mapper.BillTelMapper;
import com.mac.bill.domain.BillTel;
import com.mac.bill.service.IBillTelService;
import org.springframework.util.CollectionUtils;

/**
 * 话单Service业务层处理
 *
 * @author mac
 * @date 2023-04-08
 */
@Service
public class BillTelServiceImpl implements IBillTelService {
    @Autowired
    private BillTelMapper billTelMapper;

    /**
     * 查询话单
     *
     * @param id 话单主键
     * @return 话单
     */
    @Override
    public BillTel selectBillTelById(Long id) {
        return billTelMapper.selectBillTelById(id);
    }

    /**
     * 查询话单列表
     *
     * @param billTel 话单
     * @return 话单
     */
    @Override
    public List<BillTel> selectBillTelList(BillTel billTel) {
        return billTelMapper.selectBillTelList(billTel);
    }

    /**
     * 新增话单
     *
     * @param billTel 话单
     * @return 结果
     */
    @Override
    public int insertBillTel(BillTel billTel) {
        try {
            return billTelMapper.insertBillTel(billTel);
        } catch (Exception e) {
            System.out.println("有空数据，跳过。。。");
            return 0;
        }
    }

    /**
     * 修改话单
     *
     * @param billTel 话单
     * @return 结果
     */
    @Override
    public int updateBillTel(BillTel billTel) {
        return billTelMapper.updateBillTel(billTel);
    }

    /**
     * 批量删除话单
     *
     * @param ids 需要删除的话单主键
     * @return 结果
     */
    @Override
    public int deleteBillTelByIds(Long[] ids) {
        return billTelMapper.deleteBillTelByIds(ids);
    }

    /**
     * 删除话单信息
     *
     * @param id 话单主键
     * @return 结果
     */
    @Override
    public int deleteBillTelById(Long id) {
        return billTelMapper.deleteBillTelById(id);
    }

    @Override
    public Set<String> selectBillTelListLike() {
        List<BillTel> billTels = billTelMapper.selectBillTelListLike();

        List<BillTel> billTels1 = billTelMapper.selectBillTelListLike1();
        if (CollectionUtils.isEmpty(billTels) && CollectionUtils.isEmpty(billTels1)) {
            return new HashSet<>();
        }

        Set<String> collect = billTels.stream().map(BillTel::getSendTel).collect(Collectors.toSet());

        Set<String> collect1 = billTels1.stream().map(BillTel::getReceiveTel).collect(Collectors.toSet());

        collect.addAll(collect1);

        return collect;
    }

    @Override
    public List<BillTel> selectBillTelByIds(Long[] ids) {
        List<BillTel> billTels = new ArrayList<>();
        for (Long id : ids) {
            BillTel billTel = billTelMapper.selectBillTelById(id);
            if (!Objects.isNull(billTel)) {
                billTels.add(billTel);
            }
        }

        return billTels;
    }
}
